package com.example.javabasic.thread.classtwo.workthread.demo2.future;



/**
 * @description 任务future  用来存储任务执行结果 Future设计模式
 * @Author Lin FuYuan
 * @date 2021/2/25
 */
public class TaskFuture<T>  {
    //用来判断是否结束
    private volatile boolean done = false;
    private T result ;
    //当任务完成的时候, 调用此方法,并且保存结果集
    public void done(T result){
        synchronized (this){
            this.result = result;
            this.done = true;
            //唤醒阻塞的线程
            this.notifyAll();
        }
    }
    //如果有个线程要获取结果时   在这里阻塞
    public T get() throws InterruptedException {
        synchronized (this){
            while(!done){
                //如果当前任务没有执行完 则进行阻塞
                this.wait();
            }
        }
        return result;
    }
}
